Cieľ

Cieľom tohto reportu je popísať prípravu dát, vytvorenie a otestovanie modelu, ktorý dokáže predikovať počet strelených gólov v nasledujúcej sezóne pre hráča v NHL.

Príprava vstupných dát

Zdrojový dataset obsahuje štatistiky hráčov NHL za sezóny 2004-2018. Vytvoríme si nový dataset, ktorý bude obsahovať nasledovné dáta z pôvodného datasetu:

  • Nick - identifikácia hráča
  • Age - vek
  • GP - odohrané zápasy
  • ATOI - priemerný počet minút na ľade, zaokrúhlime na celé číslo
  • Season - sezóna
  • G - góly - budú slúžiť ako target pri trénovaní modelu a ako kontrola predikcie pri testovaní modelu

Z nového datasetu odstránime hráčov, ktorí odohrali menej ako 4 sezóny, aby sme mali pre trénovanie modelu aspoň nejaké zaručené množstvo dát pre každého hráča, čo by malo viesť k lepšej predikcii modelu.

Dáta obsahujú extrémne hodnoty (outliers), no jedná sa o hodnoty, ktoré nesú informáciu a nejedná sa o chybu v dátach, (napr. z predchádzajúceho reportu vieme, že Chris Chelios hral v NHL ako 48-ročný). Nie je teda potrebné ich odstrániť ani nijako riešiť.
Dáta nepotrebujú žiadne čistenie ani opravy, hodnoty pre dáta nechýbajú a nenachádzajú sa žiadne duplicitné riadky. Dáta sú konzistentné.

Popis finálnych dát

Nick - reprezentuje kategorický prediktor (zakódujeme pomocou One hot encodingu)
Age, GP, ATOI, Season - reprezentujú číselný prediktor
G - reprezentuje target

Modelovanie

Na vytvorenie trénovacích a testovacích dát použijeme náš nový dataset, ktorý rozdelíme následovne:

  • Trénovacie dáta: všetky dáta zo sezón hráčov okrem ich poslednej.
  • Testovacie dáta: posledná sezóna pre každého hráča, ktorá sa nachádza v datasete.

Príklad:
Hráč Sidney Crosby (vynechaný stĺpec Nick:crosbsi01). Posledný riadok reprezentuje jeho poslednú sezónu (v datasete) - testovacie dáta, zbytok sú dáta na trénovanie:

Age GP ATOI Season G
18 81 20 2006 39
19 79 21 2007 36
20 53 21 2008 24
21 77 22 2009 33
22 81 22 2010 51
23 41 22 2011 32
24 22 18 2012 8
25 36 21 2013 15
26 80 22 2014 36
27 77 20 2015 28
28 80 20 2016 36
29 75 20 2017 44
30 82 21 2018 29

Máme pripravené dáta na natrénovanie modelu a aj na jeho otestovanie. Vytvoríme si model lineárnej regresie, ktorý natrénujeme na trénovacom datasete.

Pipeline(steps=[('preprocessor',
                 ColumnTransformer(transformers=[('categ', OneHotEncoder(),
                                                  ['Nick']),
                                                 ('num', 'passthrough',
                                                  ['Age', 'GP', 'ATOI',
                                                   'Season'])])),
                ('regressor', LinearRegression())])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.

Vyhodnotenie modelu

Predikciu modelu otestujeme na vytvorenom testovacom datasete, ktorý obsahuje poslednú sezónu hráča a bude simulovať nasledujúcu sezónu v predikcii.
Pre jednoduchšie posúdenie modelu, zaokrúhlime predikcie na celé čísla a prípadné záporné čísla nastavíme na 0.

Predikcia počtu strelených gólov pre hráčov v nasledujúcej sezóne

Pozrieme sa na to, ako model dokázal predikovať presný počet gólov pre hráčov a ako dokázal predikovať s toleranciou 5 gólov.

Presná predikcia

Presná predikcia:

  • 0-20 gólov: 414 správne predikovaných gólov z 1251 - 33% správnosť predikcie.
  • 21-49 gólov: 1 správna predikcia z 91 - 1,1% správnosť predikcie.

Celkovo: 30,9% správnosť presnej predikcie.

Predikcia s toleranciou 5 gólov

Predikcia s toleranciou 5 gólov:

  • 0-20 gólov: 1092 predikovaných gólov v tolerancii z 1251 - 87,3% správnosť predikcie.
  • 21-49 gólov: 28 predikcií v tolerancii z 91 - 31,9% správnosť predikcie.

Celkovo: 83,5% správnosť predikcie s toleranciou 5 gólov.

Predikcia skúsení hráči vs. veteráni

Hráčov (1342) rozdelíme do dvoch skupín:

  • Skúsení hráči (791) - hráči, ktorí odohrali menej ako 7 sezón (a viac ako 4)
  • Veteráni (551) - hráči, ktorí odohrali 7 a viac sezón

Pozrieme sa na to, ako model dokázal pre tieto skupiny predpovedať strelené góly v nasledujúcej sezóne pre rôzne tolerancie.

Vidíme, že model dokázal predpovedať pre skúsených hráčov správne:

  • 50% strelených gólov v ďalšej sezóne s toleranciou menej ako 1 gól
  • 75% strelených gólov s toleranciou 3 góly.
  • skoro 90% strelených gólov s toleranciou 6 gólov.

U veteránov pozorujeme odlišné výsledky, správna predikcia:

  • 50% strelených gólov s toleranciou menej ako 2 góly
  • 75% strelených gólov s toleranciou menej ako 5 gólov.
  • 90% strelených gólov s toleranciou 8 gólov.

Záver

Model bol natrénovaný na hráčoch, ktorí odohrali aspoň 4 sezóny. Celkový počet hráčov, pre ktorých prebiehalo trénovanie a predikcia - 1342

Na testovacích dátach sme získali tieto výsledky:

Priemerná chyba predikcie vychádza na 2,8 gólu.

Počet presne predpovedaných gólov: 415 - 30.92% z celku

Počet predpovedí v tolerancii 5 gólov: 1121 - 83.53% z celku

Model vykazoval väčšiu presnosť pre hráčov, ktorí za sezónu nedávajú veľa gólov (pod 20), naopak pri hráčoch, ktorí dávajú veľa gólov (>20) sa model neprejavoval ako spoľahlivý.
Boli vyskúšané viaceré spôsoby pri trénovaní modelu (RandomForestRegressor, MLPRegressor, Lasso zo sklearn lib), no LinearRegression preukázala najlepšie výsledky.

Problémom pre model by mohli byť takzvané "breakout seasons", teda sezóny, kedy hráč prejaví výrazné zlepšenie svojich výkonov v porovnaní s predchádzajúcimi sezónami. Pre zaujímavosť, pri testovaní modelu bola najväčšia chyba v predikcii pre hráča William Karlsson, ktorý skóroval v sezónach 2015/16/17 - 3, 9, 6 gólov. Model pre Karlssona predikoval, že v sezóne 2018 skóruje 10-krát, no skóroval až nečakaných 43 gólov a spomedzi všetkých testovaných hráčov dosiahol najväčšiu chybu v predikcii - 33 gólov.